package com.ffggffgfv.backend.mapper;

import com.ffggffgfv.backend.entity.ShelfProduct;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 货架商品数据访问层
 */
@Mapper
public interface ShelfProductMapper {

    /**
     * 查询货架上的所有商品
     *
     * @param shelfId 货架ID
     * @return 货架商品列表
     */
    List<ShelfProduct> selectByShelfId(Long shelfId);

    /**
     * 分页查询货架上的商品
     *
     * @param shelfId 货架ID
     * @param offset  起始位置
     * @param limit   查询数量
     * @return 货架商品列表
     */
    List<ShelfProduct> selectByShelfIdWithPagination(@Param("shelfId") Long shelfId,
                                                     @Param("offset") int offset,
                                                     @Param("limit") int limit);

    /**
     * 查询货架上的商品总数
     *
     * @param shelfId 货架ID
     * @return 商品总数
     */
    long countByShelfId(Long shelfId);

    /**
     * 查询货架上的特定商品
     *
     * @param shelfId   货架ID
     * @param productId 商品ID
     * @return 货架商品对象
     */
    ShelfProduct selectByShelfIdAndProductId(@Param("shelfId") Long shelfId,
                                             @Param("productId") Long productId);

    /**
     * 根据ID查询货架商品
     *
     * @param id 货架商品ID
     * @return 货架商品对象
     */
    ShelfProduct selectById(Long id);

    /**
     * 根据RFID标签查询货架商品
     *
     * @param rfidTag RFID标签
     * @return 货架商品对象
     */
    ShelfProduct selectByRfidTag(@Param("rfidTag") String rfidTag);

    /**
     * 插入货架商品
     *
     * @param shelfProduct 货架商品对象
     * @return 影响行数
     */
    int insert(ShelfProduct shelfProduct);

    /**
     * 更新货架商品
     *
     * @param shelfProduct 货架商品对象
     * @return 影响行数
     */
    int update(ShelfProduct shelfProduct);

    /**
     * 删除货架商品
     *
     * @param id 货架商品ID
     * @return 影响行数
     */
    int deleteById(Long id);

    /**
     * 根据货架ID删除所有商品
     *
     * @param shelfId 货架ID
     * @return 影响行数
     */
    int deleteByShelfId(Long shelfId);

    /**
     * 删除货架上的指定商品
     *
     * @param shelfId   货架ID
     * @param productId 商品ID
     * @return 影响行数
     */
    int deleteByShelfIdAndProductId(@Param("shelfId") Long shelfId,
                                    @Param("productId") Long productId);
}
